namespace ai_library
{
	public interface IStateMachine<T>
	{
		IState<T> CurrentState
		{
			get;
		}

		IState<T> GlobalState
		{
			get;
		}

		bool HasCurrentState();
		bool HasGlobalState();

		bool ChangeCurrentState(IState<T> state);
		bool ChangeGlobalState(IState<T> state);

		bool RevertCurrentState();

		void Update(float dt);

		bool ProcessMessage(Message m);
	}
}

